package org.yaac.server.delegate;

import java.util.Collection;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.Future;

import com.google.appengine.api.memcache.ErrorHandler;
import com.google.appengine.api.memcache.Expiration;
import com.google.appengine.api.memcache.Stats;
import com.google.appengine.api.memcache.MemcacheService.IdentifiableValue;
import com.google.appengine.api.memcache.MemcacheService.SetPolicy;

public interface AsyncMemcacheServiceDelegate {

	public abstract Future<Void> clearAll();

	public abstract Future<Boolean> contains(Object arg0);

	public abstract Future<Boolean> delete(Object arg0, long arg1);

	public abstract Future<Boolean> delete(Object arg0);

	public abstract <T> Future<Set<T>> deleteAll(Collection<T> arg0, long arg1);

	public abstract <T> Future<Set<T>> deleteAll(Collection<T> arg0);

	public abstract Future<Object> get(Object arg0);

	public abstract <T> Future<Map<T, Object>> getAll(Collection<T> arg0);

	public abstract ErrorHandler getErrorHandler();

	public abstract Future<IdentifiableValue> getIdentifiable(Object arg0);

	public abstract String getNamespace();

	public abstract Future<Stats> getStatistics();

	public abstract Future<Long> increment(Object arg0, long arg1, Long arg2);

	public abstract Future<Long> increment(Object arg0, long arg1);

	public abstract <T> Future<Map<T, Long>> incrementAll(Collection<T> arg0, long arg1, Long arg2);

	public abstract <T> Future<Map<T, Long>> incrementAll(Collection<T> arg0, long arg1);

	public abstract <T> Future<Map<T, Long>> incrementAll(Map<T, Long> arg0, Long arg1);

	public abstract <T> Future<Map<T, Long>> incrementAll(Map<T, Long> arg0);

	public abstract Future<Boolean> put(Object arg0, Object arg1, Expiration arg2, SetPolicy arg3);

	public abstract Future<Void> put(Object arg0, Object arg1, Expiration arg2);

	public abstract Future<Void> put(Object arg0, Object arg1);

	public abstract Future<Void> putAll(Map<?, ?> arg0, Expiration arg1);

	public abstract Future<Void> putAll(Map<?, ?> arg0);

	public abstract <T> Future<Set<T>> putAll(Map<T, ?> arg0, Expiration arg1, SetPolicy arg2);

	public abstract Future<Boolean> putIfUntouched(Object arg0, IdentifiableValue arg1, Object arg2, Expiration arg3);

	public abstract Future<Boolean> putIfUntouched(Object arg0, IdentifiableValue arg1, Object arg2);

	public abstract void setErrorHandler(ErrorHandler arg0);

}